
/**
 * Universidad del Valle de Guatemala
 * CC2003 Algoritmos y Estructuras de Datos
 * Proyecto 1: Intérprete de LISP --> Lambda LISP
 * @version 2 Septiembre, 2009
 * Integrantes:
 *      @author Julio Chicas, José García, Ernesto Rodríguez, Karen Tojín
 **/
/**
 * Descripción: Driver program para el intérprete de LISP
 **/
import java.io.File;
import java.io.FileNotFoundException;
import java.util.LinkedList;
import java.util.Scanner;

public class Driver {

    public static void main(String[] args) throws ExceptionErrorInStatement {
        String inputInst;
        Scanner input = new Scanner(System.in);
        LinkedList lista = new LinkedList();
        String params="";
        int cont = 0;
        String show;
        show = "";
        show += "           ///                    ////              ////    /////////////  //////////////\n";
        show += "         //  //                   ////              ////  //////////////   ///////////////\n";
        show += "        /     /                   ////              ////  ////             ////        ////\n";
        show += "             //                   ////              ////    ////           ////        ////\n";
        show += "            ///          //////   ////              ////      /////        ///////////////\n";
        show += "           // //         //////   ////              ////         /////     /////////////\n";
        show += "          //   //                 ////              ////           /////   ////\n";
        show += "         //     //    /           ////              ////             ////  ////\n";
        show += "        //       //  //           ////////////////  ////  ///////////////  ////\n";
        show += "     ////         ////            ////////////////  ////   /////////////   ////\n";


        System.out.println(show);
        System.out.println("Copyright: José García, Julio Chicas, Ernesto Rodríguez, Karen Tojín");
        System.out.println();
        
        if(args.length!=0){
        	
        	for (int veces=0; veces<args.length; veces++)
        		params= params + args[veces];
        	
        	File arch = new File(params);
        	try {
				Scanner loader = new Scanner(arch);
				int linea = 0;
				String cache;
				
				while(loader.hasNext()){
					
					cache = loader.nextLine();
					if(cache.charAt(0)!=';')
						try {
							Operations.operate(cache, Stored.getVar());
						} catch (UnoperableException e) {
							
							System.out.println("El archivo " + arch + " tiene error en la linea " + linea);
						}
						
					
				}
				
				System.out.println("El archivo " + arch + " fue cargado");
				
			} catch (FileNotFoundException e) {
				
				System.out.println("El archivo seleccionado no fue encontrado");
			}
        	
        }

        do {
            System.out.print("[" + cont + "]" + ">> ");
            inputInst = input.nextLine();

            try {
                if ((inputInst.toLowerCase().compareTo("(exit)")) != 0) {
                    System.out.println(Operations.operate(inputInst, Stored.getVar()));
                }
            } catch (Exception e) {
                System.out.println("Error. Wrong input format." + "[" + (cont) + "]");
		System.out.println(e.getMessage());
                cont--;
            }
            cont++;
        } while (inputInst.compareTo("(exit)") != 0);

    }
}
